]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Implement the multi-window highlight on WellDisplayItem
authorDan Winship <danw@gnome.org>
Wed, 12 Aug 2009 19:53:42 +0000 (15:53 -0400)
committerDan Winship <danw@gnome.org>
Wed, 12 Aug 2009 21:08:19 +0000 (17:08 -0400)
js/ui/appDisplay.js
src/shell-drawing.c
src/shell-drawing.h

index 57d3608cc2ed7cbe3e298088a7e056973af02131..cbc873d8c9bdc62436223349fcbe43b6976d38c7 100644 (file)
@@ -487,11 +487,12 @@ WellDisplayItem.prototype = {
         if (this._windows.length > 0) {
             let glow = new Shell.DrawingArea({});
             glow.connect('redraw', Lang.bind(this, function (e, tex) {
-                Shell.draw_glow(tex,
-                                GLOW_COLOR.red / 255,
-                                GLOW_COLOR.green / 255,
-                                GLOW_COLOR.blue / 255,
-                                GLOW_COLOR.alpha / 255);
+                Shell.draw_app_highlight(tex,
+                                         this._windows.length > 1,
+                                         GLOW_COLOR.red / 255,
+                                         GLOW_COLOR.green / 255,
+                                         GLOW_COLOR.blue / 255,
+                                         GLOW_COLOR.alpha / 255);
             }));
             this._name.connect('notify::allocation', Lang.bind(this, function () {
                 let x = this._name.x;
@@ -764,10 +765,10 @@ AppWell.prototype = {
         this._appSystem.connect('favorites-changed', Lang.bind(this, function(appSys) {
             this._redisplay();
         }));
-        this._appMonitor.connect('app-added', Lang.bind(this, function(monitor) {
+        this._appMonitor.connect('window-added', Lang.bind(this, function(monitor) {
             this._redisplay();
         }));
-        this._appMonitor.connect('app-removed', Lang.bind(this, function(monitor) {
+        this._appMonitor.connect('window-removed', Lang.bind(this, function(monitor) {
             this._redisplay();
         }));
 
index daac1eee0d67574929decea9232c041d0110f28a..9271790e6a2b17a62c115e4f4f41f8455e3280fe 100644 (file)
@@ -146,25 +146,12 @@ shell_draw_clock (ClutterCairoTexture *texture,
   cairo_destroy (cr);
 }
 
-void
-shell_draw_glow (ClutterCairoTexture *texture,
-                 double red,
-                 double green,
-                 double blue,
-                 double alpha)
+static void
+draw_glow (cairo_t *cr, double red, double green, double blue, double alpha)
 {
-  cairo_t *cr;
-  guint width, height;
   cairo_pattern_t *gradient;
 
-  clutter_cairo_texture_get_surface_size (texture, &width, &height);
-
-  clutter_cairo_texture_clear (texture);
-  cr = clutter_cairo_texture_create (texture);
-
   cairo_save (cr);
-  cairo_translate (cr, width / 2.0, height / 2.0);
-  cairo_scale (cr, width / 2.0, height / 2.0);
 
   gradient = cairo_pattern_create_radial (0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
   cairo_pattern_add_color_stop_rgba (gradient, 0.0, red, green, blue, alpha);
@@ -174,8 +161,55 @@ shell_draw_glow (ClutterCairoTexture *texture,
 
   cairo_arc (cr, 0.0, 0.0, 1.0, 0.0, 2.0 * M_PI);
   cairo_fill (cr);
+
   cairo_restore (cr);
   cairo_pattern_destroy (gradient);
+}
+
+void
+shell_draw_app_highlight (ClutterCairoTexture *texture,
+                          gboolean             multi,
+                          double               red,
+                          double               green,
+                          double               blue,
+                          double               alpha)
+{
+  cairo_t *cr;
+  guint width, height;
+
+  clutter_cairo_texture_get_surface_size (texture, &width, &height);
+
+  clutter_cairo_texture_clear (texture);
+  cr = clutter_cairo_texture_create (texture);
+
+  cairo_save (cr);
+  cairo_translate (cr, width / 2.0, height / 2.0);
+
+  if (multi)
+    {
+      double scale;
+
+      /* We draw three circles of radius 1, at 0.0, -1.8, and +1.8.
+       * Total width is therefore 1 + 1.8 + 1.8 + 1 = 5.6.
+       */
+      scale = MIN (height / 2.0, width / 5.6);
+      cairo_scale (cr, scale, scale);
+
+      draw_glow (cr, red, green, blue, alpha);
+
+      cairo_translate (cr, -1.8, 0.0);
+      draw_glow (cr, red, green, blue, alpha);
+
+      cairo_translate (cr, 3.6, 0.0);
+      draw_glow (cr, red, green, blue, alpha);
+    }
+  else
+    {
+      cairo_scale (cr, width / 2.0, height / 2.0);
+      draw_glow (cr, red, green, blue, alpha);
+    }
+
+  cairo_restore (cr);
   cairo_destroy (cr);
 }
 
index 04aa58a36df86134343f20d986dd1f5ffc2b9cff..0d73786f7a24ffb0ce557896e7af6e6ea3282355 100644 (file)
@@ -17,11 +17,12 @@ void shell_draw_clock (ClutterCairoTexture *texture,
                       int                  hour,
                       int                  minute);
 
-void shell_draw_glow (ClutterCairoTexture *texture,
-                      double red,
-                      double blue,
-                      double green,
-                      double alpha);
+void shell_draw_app_highlight (ClutterCairoTexture *texture,
+                               gboolean             multi,
+                               double               red,
+                               double               blue,
+                               double               green,
+                               double               alpha);
 
 guint shell_add_hook_paint_red_border (ClutterActor *actor);